//Prioriza cartas especiales. Si no tiene, jugará una con el mismo número.
//Si tampoco tiene, jugará una con el mismo color.En última instancia, jugará cartas de comodín

package UnoBots;

import Cards.UnoCard;

public class BotSpecials extends BotPlayerUNO{
    /**
     * Constructor of this class
     * @param s Name of the bot
     */
    public BotSpecials(String s){
        super(s);
    }
    
    /**
     * This method check the next card to play.
     * @return true if the player have a card to play
     */
    
    @Override
    protected boolean chooseCardToPlay(){
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKETWO)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKETWO)){
                    playCard(c);
                    return true;
                }
            }
        }
        if (currentGame.getTopCard().getRank().equals(UnoCard.Number.TAKEFOUR)){
            for (UnoCard c : hand){
                if (c.getRank().equals(UnoCard.Number.TAKEFOUR)){
                    playCard(c);
                    return true;
                }
            }
        }
        //Primero intenta jugar una carta especial (arbitraria)
        for (UnoCard c : hand){
            if (canPlay(c) && c.isSpecialCard()){
                playCard(c);
                return true;
            }
        }
        //Si no la encuentra, intentará jugar una carta con el mismo número
        for (UnoCard c : hand){
            if (c.getRank().equals(currentGame.getTopCard().getRank())){
                playCard(c);
                return true;
            }
        }
        //Si no la encuentra, busca una con el mismo color
        for (UnoCard c : hand){
            if (c.getSuit().equals(currentGame.getTopCard().getSuit()) || c.getSuit().equals(currentGame.getColour())){
                playCard(c);
                return true;
            }
        }
        //En última instancia, intenta buscar una carta comodín que jugar
        for (UnoCard c : hand){
            if (c.isJoker()){
                playCard(c);
                return true;
            }
        }
        System.err.println("This should not be shown");
        return false;
    }
}
